﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web.Security;
using Ext.Net;
using Utpl.Syllabus.Framework.Common;
using Utpl.Syllabus.Framework.Core;
using Utpl.Syllabus.ModuloEstructuraCurricular.BL;
using Utpl.Syllabus.Nucleo.BL;
using Utpl.Syllabus.Reconocimiento.BL;
using Utpl.Syllabus.Framework;
using Utpl.Syllabus.Framework.Web.UI;

namespace Utpl.Syllabus.Reconocimiento.Web
{
    [NotAuthorize]
    public partial class PgEquivalencias : SyPageList<EquivalenciaList, EquivalenciaInfo, EquivalenciaCriteria>
    {
        /// <summary>
        /// Ejecutar acciones
        /// </summary>
        /// <param name="action">Acciones de la interfaz</param>
        /// <param name="identificadorEntidad">Identificador de la entidad</param>
        /// <param name="extraParams">Parametros</param>
        public override void RunAction(Formularios.Acciones action, int identificadorEntidad, ParameterCollection extraParams)
        {
            try
            {
                //int idEquivalencia;
                //int.TryParse(e.ExtraParams["Id"], out idEquivalencia);
                hidIdEquivalencia.SetValue(identificadorEntidad);
                Equivalencia equivalencia;
                equivalencia = Equivalencia.GetEquivalencia(identificadorEntidad);
                Session["Equivalencia"] = equivalencia;
                var operacion = action.ToString();// e.ExtraParams["Operacion"];
                var op = Operacion.Editar;
                switch (operacion)
                {
                    case "Eliminar":
                        op = Operacion.Eliminar;
                        break;
                    case "Editar":
                        op = Operacion.Editar;
                        break;
                    case "Nuevo":
                        equivalencia = Equivalencia.NewEquivalencia();
                        Session["Equivalencia"] = equivalencia;
                        op = Operacion.Nuevo;
                        //wucEditor1.Show(equivalencia, Operacion.Nuevo);
                        break;
                }
                wucEditor1.Show(equivalencia, op);
            }
            catch (Exception ex)
            {
                ManejadorExcepcionesHelper.CatchExceptionLoad(ex, this.ManejadorExcepciones, this.ManejadorMensajes);
            }
            //ucAdministraCE.RunAction(action, identificadorEntidad);
        }

        /// <summary>
        /// Agregar las validaciones necesarias para la pagina de listado
        /// </summary>
        public override void AgregarValidaciones()
        {
            #region < Seguridad >

            ManejadorControles.Habilitar(gpEquivalencias, typeof(Equivalencia));
            ManejadorControles.Habilitar(btnNuevo, ActionCreate.Instance, typeof(Equivalencia));

            #endregion
        }

        /// <summary>
        /// Configuracion de controles de la pagina de listados. 
        /// </summary>
        public override void ConfigurarControles()
        {
            ControlStoreListado = stoEquivalencias;
        }

        /// <summary>
        /// Configuracion de la paginacion 
        /// </summary>
        public override void ConfigurarPaginacion()
        {
            /*ptbBuscarEquivalencias.PageSize = ParametroInfo.GetParametro<int>(CodigosParametros.PARAMETRO_TAMAÑO_PAGINA_GRILLAS);

            stoEquivalencias.AutoLoadParams["start"] = "={0}";
            stoEquivalencias.AutoLoadParams["limit"] = string.Format("={0}", ptbBuscarEquivalencias.PageSize);*/
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!X.IsAjaxRequest)
            {
                int rolId;
                int.TryParse(Session[ConstantesBL.ROL].ToString(), out rolId);
                var rol = SyllabusApplication.Instance().GetCurrentUser().Roles.FirstOrDefault(r => r.RolId == rolId);
                var rolesEqv = ConfigurationManager.AppSettings["RolesEquivalencias"].Split(',');
                if (rolesEqv.Count(p => p == rol.Codigo) == 1)
                {
                    DatosIniciales();
                }
                else
                {
                    SessionGuard.AgainstNullSession(ConstantesBL.SESIONID);
                    SyPrincipal.Logout();

                    Response.Redirect(FormsAuthentication.LoginUrl);
                }
            }
        }
        void DatosIniciales()
        {
            var criterio = ProgramaEstructuraVariacionCriteria.New();
            criterio.UnidadAcademicaId =  null;
            criterio.ModalidadId = null;
            criterio.NivelAcademicoId =  null;
            criterio.PeriodoFechaInicio = DateTime.Now;
            var listaVariaciones = ProgramaEstructuraVariacionList.Get(criterio).OrderBy(pecl => pecl.VariacionNombre);
            cbbProgramaVariacionB.Reset();
            stoProgramaVariacionB.DataSource = listaVariaciones;
            stoProgramaVariacionB.DataBind();
        }

        protected void stoEquivalencias_StoreRefresh(object sender, StoreRefreshDataEventArgs e)
        {
            try
            {
                int estadoId, start, limit, variacionId;
                int.TryParse(e.Parameters["VariacionId"], out variacionId);
                int.TryParse(e.Parameters["Estado"], out estadoId);
                //int.TryParse(e.Parameters["start"], out start);
                //int.TryParse(e.Parameters["limit"], out limit);
                var criteria = EquivalenciaCriteria.New();
                criteria.Codigo = e.Parameters["Codigo"];
                criteria.Nombre = e.Parameters["Nombre"];
                estadoId = estadoId == 0 ? -1 : estadoId == -1 ? 0 : 1;
                criteria.EstadoId = estadoId;
                criteria.VariacionId = variacionId;
                //var listaEquivalencias = EquivalenciaList.Get(criteria,start,limit );
                var listaEquivalencias = EquivalenciaList.Get(criteria);
                stoEquivalencias.DataSource = listaEquivalencias;
                stoEquivalencias.DataBind();
                //stoEquivalencias.
            }
            catch (Exception ex)
            {
                ManejadorExcepcionesHelper.CatchExceptionLoad(ex, this.ManejadorExcepciones, this.ManejadorMensajes);
            }
        }

        protected void btnBuscar_Click(object sender, DirectEventArgs e)
        {
            try
            {
                int estadoId;
                int.TryParse(e.ExtraParams["Estado"], out estadoId);
                var criteria = EquivalenciaCriteria.New();
                criteria.Codigo = e.ExtraParams["Codigo"];
                criteria.Nombre = e.ExtraParams["Nombre"];
                estadoId = estadoId == 0 ? -1 : estadoId == -1 ? 0 : 1;
                criteria.EstadoId = estadoId;
                /*var listaEquivalencias = EquivalenciaList.Get(criteria);
                stoEquivalencias.DataSource = listaEquivalencias;
                stoEquivalencias.DataBind();*/
            }
            catch (Exception ex)
            {
                ManejadorExcepcionesHelper.CatchExceptionLoad(ex, this.ManejadorExcepciones, this.ManejadorMensajes);
            }
        }
        protected void btnNuevo_Click(object sender, DirectEventArgs e)
        {
            var equivalencia = Equivalencia.NewEquivalencia();
            Session["Equivalencia"] = equivalencia;
            wucEditor1.Show(equivalencia, Operacion.Nuevo);
        }
        protected void gpEquivalencias_Command(object sender, DirectEventArgs e)
        {
            try
            {
                int idEquivalencia;
                int.TryParse(e.ExtraParams["Id"], out idEquivalencia);
                hidIdEquivalencia.SetValue(idEquivalencia);
                var equivalencia = Equivalencia.GetEquivalencia(idEquivalencia);
                Session["Equivalencia"] = equivalencia;
                var operacion = e.ExtraParams["Operacion"];
                var op = Operacion.Editar;
                switch (operacion)
                {
                    case "Eliminar":
                        op = Operacion.Eliminar;
                        break;
                    case "Editar":
                        op = Operacion.Editar;
                        break;
                }
                wucEditor1.Show(equivalencia, op);
            }
            catch (Exception ex)
            {
                ManejadorExcepcionesHelper.CatchExceptionLoad(ex, this.ManejadorExcepciones, this.ManejadorMensajes);
            }

        }
    }

}